package com.cloudspace.jindun.manager;

import com.cloudspace.jindun.JindunApp;
import com.cloudspace.jindun.dao.ContactPerson;
import com.cloudspace.jindun.dao.ContactPersonDao;
import com.cloudspace.jindun.model.Person;
import com.cloudspace.jindun.utils.ObjUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by zengxianhua on 16/12/22.
 */

public class ContactPersonManager {
    private static ContactPersonManager instance;

    public synchronized static ContactPersonManager getInstance(){
        if (instance == null){
            instance = new ContactPersonManager();
        }

        return instance;
    }

    public  void addContactPerson(ContactPerson record){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return;
        }

        JindunApp.getInstance().getDaoSession().getContactPersonDao().insertOrReplace(record);
    }

    public  void addContactPerson(List<ContactPerson> records){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return;
        }

        JindunApp.getInstance().getDaoSession().getContactPersonDao().insertOrReplaceInTx(records);
    }

    public List<Person> queryAll(){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return null;
        }

        List<ContactPerson> result = JindunApp.getInstance().getDaoSession().getContactPersonDao().queryBuilder().list();
        List<Person> personResult = new ArrayList<Person>();

        for (ContactPerson contactPerson : result){
            Person person = Person.constructFromDatabase(contactPerson);
            personResult.add(person);
        }

        return personResult;
    }


    public Person queryBySipAccount(String sipAccount){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return null;
        }

        List<ContactPerson> result = JindunApp.getInstance().getDaoSession().getContactPersonDao().queryBuilder().where(ContactPersonDao.Properties.SipAccout.eq(sipAccount)).list();


        if (ObjUtil.isEmpty(result)){
            return null;
        }

        return Person.constructFromDatabase(result.get(0));
    }

    public Person queryByUserId(String userId){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return null;
        }

        List<ContactPerson> result = JindunApp.getInstance().getDaoSession().getContactPersonDao().queryBuilder().where(ContactPersonDao.Properties.UserId.eq(userId)).list();


        if (ObjUtil.isEmpty(result)){
            return null;
        }

        return Person.constructFromDatabase(result.get(0));
    }

    public  void deleteContactPerson(String userId){
        if (JindunApp.getInstance().getDaoSession() == null) {
            return;
        }

        ContactPerson key = JindunApp.getInstance().getDaoSession().getContactPersonDao().queryBuilder().where(ContactPersonDao.Properties.UserId.eq(userId)).unique();

        if (key == null){
            return;
        }

        JindunApp.getInstance().getDaoSession().getContactPersonDao().delete(key);
    }

    public void deleteAll() {
        if (JindunApp.getInstance().getDaoSession() == null) {
            return;
        }

        JindunApp.getInstance().getDaoSession().getContactPersonDao().deleteAll();
    }
}
